<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>

  // 有一对兔子，从出生后第三个月起每个月都生一对兔子，小兔子长到第三个月后每个月又生一对兔子，
  // 假如兔子都不死，问第二十个月的兔子对数为多少？

  // 1  2   3   4   5   6   7    8      n
  // 1  1   2   3   5   8   13   21     n-1个月 的 + n-2个月的

  // 每一个月兔子对数 === 上一个月的兔子 + 新生出来的兔子(上上一个有几对 就会生几对)
  // 每一个月==上一个月+上上一个月


  function fn(n){
    if (n==2) {
      return 1
    }
    if (n==1) {
      return 1
    }
    // n个月===n-1个月(上一个月) + n-2个月(上上一个月)
    return fn(n-1)+fn(n-2)
  }
  // fn(10)===>fn(8)+fn(9)===>fn(7)+fn(6) + fn(8)+fn(7)
  console.log(fn(20));


  // 走台阶的问题:  10个台阶 ,一次只能走一节或者走两节,,走上第十节  有几种走法? 

  // 1  2   3   4   5   6   7    8    9    10
  // 1  2   3   5   8   13  21   34   55   89

  // 走上第十节 ,只有两种可能
  // 一种是: 在第8节垮了 2节上去的
  // 一种是 第九节 垮了一节上去的
  // 走上第十节之前 要么你是在 第8节  要么是在 第9节 (两种可能)

  function f(n){
    if (n==2) {
        return 2
    }
    if(n==1){
      return 1
    }
    return f(n-1)+f(n-2)
  }
  console.log(f(10));



  // 递归练习 

  // 1.  递归实现 求 n的阶乘
  // 2. 用递归实现你 求 n的 阶乘和 (需要使用第一个题目封装的方法)
  </script>
</body>
</html>